package org.example.springmvc.controller;

import org.example.springmvc.bean.Person;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

@RestController
//靠隐藏的核心注解：@ResponseBody：把返回的内容写到响应体中
public class ResponseTestController {
    @RequestMapping("resp01")
    public Person test01() {
        Person person = new Person();
        person.setUsername("张三");
        person.setPassword("11111");
        person.setCellphone("12345678");
        person.setAgreement(false);
        person.setHobby(new String[]{"看电影", "听音乐"});
        person.setSex("女");
        person.setGrade("一年级");
        return person;
    }

    /*文件下载：
    *       HttpEntity:拿到整个请求数据
    *       ResponseEntity:拿到整个响应数据（响应头、响应体、状态码）
    *
    * ok:创建一个状态码为 200 的响应实体，表示请求成功。
    *   可以通过链式调用添加响应头（如 contentType、contentLength 和 header），最后通过 body(bytes) 指定响应体内容。
    *
    * byte[]:创建一个字节数组(字节流)，把文件内容读取到字节数组中
    * */
    @RequestMapping("download")
    public ResponseEntity<InputStreamResource> download() throws IOException {

        //创建输入流：需要下载的文件
        FileInputStream inputStream = new FileInputStream("C:\\Users\\Administrator\\Pictures\\联想截图\\联想截图_20250709013029.png");

        //创建字节数组：输入流读取文件内容，把内容放到字节数组中
        //一口气读会溢出
         byte[] bytes = inputStream.readAllBytes();

        //解决中文乱码
        String encode = URLEncoder.encode("我是美女.jpg", "UTF-8");

        //创建输入流资源:防止文件太大导致内存溢出
        InputStreamResource resource = new InputStreamResource(inputStream);


        return ResponseEntity.ok()
                //Content-Type: 内容类型  文件流
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                //内容大小
                .contentLength(inputStream.available())
                //Content-Disposition: 内容处理方式——attachment:下载
                .header("Content-Disposition", "attachment;filename=" + encode)
                .body(resource);

    }
}
